package com.pan.structual.composite;

import com.pan.structual.composite.node.XmlNode;
import com.pan.structual.composite.utils.XmlUtils;

import java.io.File;

/**
 * 组合模式，把一组对象当成单一的对象，形成一个树型结构的组合
 *
 * 这里我写的例子是xml，把xml每个标签标签和属性当初一个 xmlNode，通过childList访问子节点
 * 如果需求更复杂
 * 可以学 org.w3c.dom 那样把node改为接口，创建Element等的node接口实现区分具体的不同角色
 *
 * 优点
 * 1.通过组合清楚的定义分层次的复杂对象
 * 2.简化了的结构，同时可以方便的用同一的逻辑对每个节点进行控制
 * 3.方便了对整个层次结构的控制,加入遍历更改节点都很容易
 */
public class CompositeApplication {
    public static void main(String[] args) {
        File file = new File("src/main/java/com/pan/structual/composite/Test.xml");
        XmlUtils xmlUtils = new XmlUtils(file);
        XmlNode xmlNode = xmlUtils.readDoc();
        System.out.println(xmlNode.toString());

        XmlNode childByName = xmlNode.findChildByName("factoryTypes")
                .findChildByName("factoryType");
        System.out.println(childByName);
    }
}
